"""
1、写一个面向对象的例子：
-比如创建一个类（Animal）【动物类】，类里有属性（名称，颜色，年龄，性别），类方法（会叫，会跑）
-创建子类【猫】，继承【动物类】
-重写父类的__init__方法，继承父类的属性
-添加一个新的属性，毛发=短毛
-添加一个新的方法， 会捉老鼠，
-重写父类的【会叫】的方法，改成【喵喵叫】
-创建子类【狗】，继承【动物类】
-复写父类的__init__方法，继承父类的属性
-添加一个新的属性，毛发=长毛
-添加一个新的方法， 会看家
-复写父类的【会叫】的方法，改成【汪汪叫】
"""


# 创建Animal类
class Animal:
    # 编写属性
    def __init__(self, name, color, age, sex):
        self.name = name
        self.color = color
        self.age = age
        self.sex = sex

    # 创建方法
    def shouting(self):
        print(f"{self.name}在叫")

    def run(self):
        print(f"{self.name}在跑步")


# 创建子类【猫】，继承【动物类】
class Cat(Animal):
    # 重写父类的__init__方法，继承父类的属性,添加一个新的属性，毛发=短发
    def __init__(self, name, color, age, sex, hair):
        super().__init__(name, color, age, sex)
        self.hair = hair

    # 添加一个新的方法， 会捉老鼠
    def catch_the_mouse(self):
        print(f'{self.name}在捉老鼠')

    # 重写父类的【会叫】的方法，改成【喵喵叫】
    def shouting(self):
        print(f"在猫猫叫")


# 创建子类【狗】，继承【动物类】
class Dog(Animal):
    # 复写父类的__init__方法，继承父类的属性,添加一个新的属性，毛发=长发
    def __init__(self, name, color, age, sex, hair):
        super().__init__(name, color, age, sex)
        self.hair = hair

    # 添加一个新的方法， 会看家
    def look_home(self):
        print(f'{self.name}在看家')

    # 复写父类的【会叫】的方法，改成【汪汪叫】
    def shouting(self):
        print(f"{self.name}在汪汪叫")


"""
2、在入口函数中创建类的实例
-创建一个猫猫实例
-调用捉老鼠的方法
-打印【猫猫的姓名，颜色，年龄，性别，毛发，捉到了老鼠】
-创建一个狗狗实例
-调用【会看家】的方法
-打印【狗狗的姓名，颜色，年龄，性别，毛发】
"""
if __name__ == '__main__':
    # 创建一个猫猫实例
    persian_cat = Cat('波斯猫', 'white', 2, '公', '短发')
    # 调用捉老鼠的方法
    persian_cat.catch_the_mouse()

    # 打印【猫猫的姓名，颜色，年龄，性别，毛发，捉到了老鼠】
    print(f"{persian_cat.name},{persian_cat.color},{persian_cat.age},{persian_cat.sex},{persian_cat.hair},捉到了老鼠")

    # 创建一个狗狗实例
    keji = Dog('柯基', 'yellow', 7, '母', '长发')
    # 调用【会看家】的方法
    keji.look_home()
    # 打印【狗狗的姓名，颜色，年龄，性别，毛发】
    print(f'{keji.name},{keji.color},{keji.age},{keji.sex},{keji.hair}')
